草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 内存泄漏——释放和删除

IFSUPCUTILSize*size=NULL;CoCreateInstance(CLSID_UTILSize,NULL,CLSCTX_INPROC_SERVER,IID_IFSUPCUTILSize,reinterpret_cast(&size));if(size!=NULL){size->Release();size=NULL;}deletesize;我需要在上面的代码中“删除大小”吗?如果我包括“deletesize”,我会因为没有使用New而发生内存泄漏吗?或者在对CoCreateInstance的调用中是否有一个New。我用VC++6构建了这个。

c++ - 释放调用者或被调用者的内存?

一个函数(比如“fun()”)分配内存并返回指向已分配内存的指针。我应该如何确保释放此内存。当它返回给调用者时,我无法在函数“fun()”中立即释放它。如果fun()是库的一部分怎么办?释放内存是谁的责任。在fopen()的情况下,内存由fclose()释放。但就我而言,“fun()”被反复调用。所以我迫不及待地释放内存。 最佳答案 以下是C的答案,在OP承认使用C++之前发布。在该语言中,按照其他人的建议使用RAII和智能指针。如果函数返回分配的内存,则调用者负责释放,这必须在函数的文档中说明。如果需要更多的清理,那么free会提

Linux:查看服务器信息,CPU、内存、系统版本、内核版本等

还是最近工作的总结,在做一些性能验证,这就需要要根据服务器的配置综合考虑来做进一步的结论论证,废话不多说目录查看Linux内核版本查看Linux系统版本CPU查看CPU信息(型号)物理CPU个数每个物理CPU中core的个数(即核数)查看逻辑CPU的个数内存查看内存信息其他最后查看Linux内核版本第一种方式cat/proc/version第二种方式uname-a个人偏推崇第一种方式吧,能够更明显的看到版本和一些详细信息查看Linux系统版本第一种方式这个命令适用于所有的Linux发行版,包括Redhat、SuSE、Debian…等发行版。lsb_release-a第二种方式这种方法只适合Re

c++ - Valgrind 和内存泄漏

我正在对我的软件进行一些内存分析,并在使用valgrind的以下命令运行标准内存泄漏检查后valgrind--tool=memcheck--leak-check=full./path_to_program我得到以下总结:==12550==LEAKSUMMARY:==12550==definitelylost:597,170bytesin7blocks==12550==indirectlylost:120bytesin10blocks==12550==possiblylost:770,281bytesin1,455blocks==12550==stillreachable:181,189

c++ - 尝试动态内存分配 C++

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭4年前。Improvethisquestion我试图通过使用指针精确地分配1KiB的内存GetProcessMemoryInfo(GetCurrentProcess(),&pmc,sizeof(pmc));std::cout问题是每次我运行这段代码时它似乎分配100KiB到400KiB之间的任何地方我使用char因为它的大小是1个字节

c++ - 聪明地处理 vector 内存分配

假设我必须迭代一个可能非常大的数字vector,并将偶数和奇数元素复制到新的、单独的vector中。(源vector的偶数与奇数的比例可以是任意的;它可以是全偶数、全奇数或介于两者之间。)为简单起见,push_back通常用于此类事情:for(std::size_tIndex;Index但是,我担心如果将其用作排序算法等性能至关重要的实现的一部分,这将是低效且有害的。例如,快速排序涉及像这样分离元素。您可以使用reserve()预先分配内存,因此只需要一次分配,但随后您必须遍历整个源vector两次-一次计算需要多少元素进行整理,并再次进行实际复制。当然,您可以分配与源vector大小

c++ - 堆上的内存地址是否被重用?

标题问题的进一步解释是有序的,让我解释一下我的场景。我有一个指向堆上几个对象的指针的列表容器。每当创建一个新对象时,指向它的指针就会被添加到列表中,而每当删除一个对象时,它的指针就会被删除。可以肯定地说,此列表中的所有指针始终有效。列表中的许多对象都包含指向同一列表中其他对象的指针。在取消引用任何这些指针之前,我想使用CheckAgainstList(ptr*)函数来确保一个对象指向同一列表中的另一个对象,因此不指向到已被删除的对象。现在戴上你的锡纸帽子,这可能吗?对象A有一个指向对象B的指针,其内存地址为0x00988e50。对象B被删除。创建对象C并将其放入新释放的内存空间0x00

c++ - 使 shared_ptr 失去内存所有权

我有一个shared_ptr我绕过它。最终,在某些情况下,我想将原始指针传递给一个函数,然后该函数成为内存所有者。在这些情况下shared_ptr不再负责释放内存,因为我调用的函数获得了所有权。我如何获得shared_ptr失去所有权?我想要shared_ptr的原因失去所有权是因为我想使用ProtocolBuffer的AddAllocated功能,它接受一个已经分配的指针并获得它的所有权。例子:shared_ptrmyProtoSharedPtr=//bythispointthisisthelastreferencetotheheapallocatedMyProto//Iwantto

c++ - 如何限制生成的程序可以在 C++ 中使用的内存量

在我的C++程序中,我将启动其他程序。如果这些程序使用了一定数量的内存,我希望我的程序终止它们的进程。那怎么办?我可能会使用execv来启动程序。 最佳答案 假设您使用的是POSIX系统,您可以通过在fork()之后调用setrlimit(2)来限制它。例如:if(fork()==0){structrlimitlimits;limits.rlim_cur=10000000;//setdatasegmentlimitto10MBlimits.rlim_max=10000000;//makesurethechildcan'tincrea

c++ - 为什么我的指针输出一个字符串而不是 C++ 中的内存地址?

这个问题在这里已经有了答案:cout(6个答案)关闭3年前。我正在研究一个使用指针的字符串类,但我只是难以理解我的print是如何工作的。功能在这里工作。具体来说,为什么cout输出字符串而不是它指向的动态数组的内存地址?我的理解是变量pString是一个指针。classMyString{public:MyString(constchar*inString);voidprint();private:char*pString;};MyString::MyString(constchar*inString){pString=newchar[strlen(inString)+1];strcp